<?php

class JpController extends Controller {

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';

    /**
     * @return array action filters
     */
    public function filters() {
        return array(
            'accessControl', // perform access control for CRUD operations
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules() {
        return array(
            array('allow', // allow all users to perform 'index' and 'view' actions
                'actions' => array('index', 'view'),
                'users' => array('*'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions' => array('create', 'update', 'jpRequest'),
                'users' => array('@'),
            ),
            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions' => array('admin', 'delete', 'asignarHorario', 'hola', 'updateHola', 'updateAsignarHorario', 'asignarHorario2', 'generarCSV'),
                'users' => array('@'),
            ),
            array('deny', // deny all users
                'users' => array('*'),
            ),
        );
    }

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id) {
        $this->render('view', array(
            'model' => $this->loadModel($id),
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate() {
        $model = new Jp;

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if (isset($_POST['Jp'])) {
            $model->attributes = $_POST['Jp'];
            if ($model->save())
                $this->redirect(array('view', 'id' => $model->idJp));
        }

        $this->render('create', array(
            'model' => $model,
        ));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id) {
        $model = $this->loadModel($id);

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if (isset($_POST['Jp'])) {
            $model->attributes = $_POST['Jp'];
            if ($model->save())
                $this->redirect(array('view', 'id' => $model->idJp));
        }

        $this->render('update', array(
            'model' => $model,
        ));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    function desasignarEvaluacion($jp, $evaluacion) {
        //borro la entrada de la tabla jpxevaluacion
        $jpxeva = JpHasEvaluacion::model()->find('jp_idJp=:jp AND evaluacion_idEvaluacion=:eva', array(':jp' => $jp, ':eva' => $evaluacion));
        if (count($jpxeva) > 0) {
            $jpxeva->delete();
            //se verifica si en la tabla jp_has_evaluacion aun esta la evaluacion,
            //si es que no, se cambia estado de evaluacion a 'Sin Asignar'
            if (!JpHasEvaluacion::model()->find('evaluacion_idEvaluacion=:eva', array(':eva' => $evaluacion))) {
                Yii::app()->db
                        ->createCommand("UPDATE evaluacion SET estado = 'Sin Asignar' WHERE idEvaluacion=:eva")
                        ->bindValues(array(':eva' => $evaluacion))
                        ->execute();
            }
            //se pone como libre en la tabla disponibilidad al jp en las horas de la evaluaion
            Yii::app()->db
                    ->createCommand("UPDATE disponibilidad SET estado = 'libre' WHERE persona_idPersona=:jp AND idEvaluacion=:eva")
                    ->bindValues(array(':jp' => $jp, ':eva' => $evaluacion))
                    ->execute();

            Yii::app()->db
                    ->createCommand("UPDATE disponibilidad SET idEvaluacion = null WHERE persona_idPersona=:jp AND idEvaluacion=:eva")
                    ->bindValues(array(':jp' => $jp, ':eva' => $evaluacion))
                    ->execute();
        }
    }

    public function actionDelete($id) {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request

            $jpxeva = JpHasEvaluacion::model()->findAll('jp_idJp=:idJp', array(':idJp' => $id));

            $jpxeva2 = $jpxeva;
            foreach ($jpxeva as $jpxevaFila) {
                $this->desasignarEvaluacion($id, $jpxevaFila['evaluacion_idEvaluacion']);
                echo '<script> alert("hola2");</script>';
            }

            Yii::app()->db
                    ->createCommand("DELETE FROM disponibilidad WHERE persona_idPersona=:idJp")
                    ->bindValues(array(':idJp' => $id))
                    ->execute();

            $this->loadModel($id)->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        }
        else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    /**
     * Lists all models.
     */
    public function actionIndex() {
        $model = new Jp('search');
        $model->unsetAttributes();  // clear any default values
        if (isset($_GET['Jp']))
            $model->attributes = $_GET['Jp'];

        $this->render('admin', array(
            'model' => $model,
        ));
//        $dataProvider = new CActiveDataProvider('Jp');
//        $this->render('index', array(
//            'dataProvider' => $dataProvider,
//        ));
    }

    /**
     * Manages all models.
     */
    public function actionAdmin() {
        $model = new Jp('search');
        $model->unsetAttributes();  // clear any default values
        if (isset($_GET['Jp']))
            $model->attributes = $_GET['Jp'];

        $this->render('admin', array(
            'model' => $model,
        ));
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($id) {
        $model = Jp::model()->findByPk($id);
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model) {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'jp-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    function dameFecha($fecha, $dia) {
        list($day, $mon, $year) = explode('/', $fecha);
        return date('d/m/Y', mktime(0, 0, 0, $mon, $day + $dia, $year));
    }

    public function actionAsignarHorario2($id) {
        $datos = array();
        $datos['model'] = $this->loadModel($id);
        $datos['fecha_lun'] = "";
        $datos['fecha_mar'] = "";
        $datos['fecha_mie'] = "";
        $datos['fecha_jue'] = "";
        $datos['fecha_vie'] = "";
        $datos['otro'] = "ddddd";
        $datos['disponibilidadJP'] = Disponibilidad::model()->findAll($criteria);
        $this->renderPartial('asignarHorario', $datos);
    }

    public function actionAsignarHorario($id) {
        $datos = array();
        $datos['model'] = $this->loadModel($id);
        //$datos['modelDispobilidad'] = new Disponibilidad;
        date_default_timezone_set('America/Lima');
        $fecha_elegida = date('d/m/Y');
        $hoynum = date('N');
        $hoyfecha = date('d/m/Y');
        if (isset($_POST['fecha_elegida']))
            $fecha_elegida = $_POST['fecha_elegida'];

        $datos['fecha_lun'] = "";
        $datos['fecha_mar'] = "";
        $datos['fecha_mie'] = "";
        $datos['fecha_jue'] = "";
        $datos['fecha_vie'] = "";

        list($dia, $mes, $anho) = explode("/", $fecha_elegida);
        $hoynum = date("N", mktime(0, 0, 0, $mes, $dia, $anho));

        switch ($hoynum) {
            case 1:
                $datos['fecha_lun'] = $fecha_elegida;
                $datos['fecha_mar'] = $this->dameFecha($fecha_elegida, 1);
                $datos['fecha_mie'] = $this->dameFecha($fecha_elegida, 2);
                $datos['fecha_jue'] = $this->dameFecha($fecha_elegida, 3);
                $datos['fecha_vie'] = $this->dameFecha($fecha_elegida, 4);
                breaK;
            case 2:
                $datos['fecha_lun'] = $this->dameFecha($fecha_elegida, -1);
                $datos['fecha_mar'] = $fecha_elegida;
                $datos['fecha_mie'] = $this->dameFecha($fecha_elegida, 1);
                $datos['fecha_jue'] = $this->dameFecha($fecha_elegida, 2);
                $datos['fecha_vie'] = $this->dameFecha($fecha_elegida, 3);
                breaK;
            case 3:
                $datos['fecha_lun'] = $this->dameFecha($fecha_elegida, -2);
                $datos['fecha_mar'] = $this->dameFecha($fecha_elegida, -1);
                $datos['fecha_mie'] = $fecha_elegida;
                $datos['fecha_jue'] = $this->dameFecha($fecha_elegida, 1);
                $datos['fecha_vie'] = $this->dameFecha($fecha_elegida, 2);
                breaK;
            case 4:
                $datos['fecha_lun'] = $this->dameFecha($fecha_elegida, -3);
                $datos['fecha_mar'] = $this->dameFecha($fecha_elegida, -2);
                $datos['fecha_mie'] = $this->dameFecha($fecha_elegida, -1);
                $datos['fecha_jue'] = $fecha_elegida;
                $datos['fecha_vie'] = $this->dameFecha($fecha_elegida, 1);
                breaK;
            case 5:
                $datos['fecha_lun'] = $this->dameFecha($fecha_elegida, -4);
                $datos['fecha_mar'] = $this->dameFecha($fecha_elegida, -3);
                $datos['fecha_mie'] = $this->dameFecha($fecha_elegida, -2);
                $datos['fecha_jue'] = $this->dameFecha($fecha_elegida, -1);
                $datos['fecha_vie'] = $fecha_elegida;
                breaK;
        }

        list($dia, $mes, $anho) = explode("/", $datos['fecha_lun']);
        $fecha_lun = date("Y-m-d", mktime(0, 0, 0, $mes, $dia, $anho));

        list($dia, $mes, $anho) = explode("/", $datos['fecha_vie']);
        $fecha_vie = date("Y-m-d", mktime(0, 0, 0, $mes, $dia, $anho));

        //inicio
        function separaHoraFecha($horaFecha, &$hora, &$fecha) {
            list($hora, $fecha) = explode(".", $horaFecha);
            $hora = $hora . ":00:00";
            list($dia, $mes, $anho) = explode("/", $fecha);
            $fecha = date("Y-m-d", mktime(0, 0, 0, $mes, $dia, $anho));
        }

        function guardarDisponibilidad($horaFechaArray, $idJp) {
            if (isset($horaFechaArray)) {
                foreach ($horaFechaArray as $horaFecha) {
                    separaHoraFecha($horaFecha, $hora, $fecha);
                    $dispoNuevo = new Disponibilidad;
                    $dispoNuevo->fecha = $fecha;
                    $dispoNuevo->hora = $hora;
                    $dispoNuevo->estado = 'libre';
                    $dispoNuevo->persona_idPersona = $idJp;
                    $dispoNuevo->save();
                }
            }
        }

        if (isset($_POST['submit'])) {
            if (isset($_POST['idsDisponibilidades'])) {
                foreach ($_POST['idsDisponibilidades'] as $idDisponibilidad) {
                    $dispo = Disponibilidad::model()->findByPk($idDisponibilidad);
                    $dispo->delete();
                }
            }
            if (isset($_POST['horaLun']))
                guardarDisponibilidad($_POST['horaLun'], $id);
            if (isset($_POST['horaMar']))
                guardarDisponibilidad($_POST['horaMar'], $id);
            if (isset($_POST['horaMie']))
                guardarDisponibilidad($_POST['horaMie'], $id);
            if (isset($_POST['horaJue']))
                guardarDisponibilidad($_POST['horaJue'], $id);
            if (isset($_POST['horaVie']))
                guardarDisponibilidad($_POST['horaVie'], $id);
        }
        //fin

        $criteria = new CDbCriteria;
        $criteria->select = '*';
        $criteria->condition = 'fecha>=:fecha_lun AND fecha<=:fecha_vie AND persona_idPersona=:idJp';
        $criteria->params = array(':fecha_lun' => $fecha_lun,
            ':fecha_vie' => $fecha_vie,
            ':idJp' => $id
        );
        $criteria->order = 'fecha ASC, hora ASC';
        $datos['disponibilidadJP'] = Disponibilidad::model()->findAll($criteria);
        $datos['fecha_elegida'] = $fecha_elegida;

        if (isset($_POST['Jp'])) {
            $datos['model']->attributes = $_POST['Jp'];
            $datos['modelDispobilidad']->attributes = $_POST['Disponibilidad'];

            if ($datos['model']->save())
                $this->redirect(array('view', 'id' => $datos['model']->idJp));
        }
        $this->render('asignarHorario', $datos);
    }

    public function actionUpdateAsignarHorario($id) {
        $datos = array();
        $datos['model'] = $this->loadModel($id);
        $datos['modelDispobilidad'] = new Disponibilidad;
        date_default_timezone_set('America/Lima');
        $fecha_elegida = $_POST['fecha_elegida'];
        //$hoynum = date('N', strtotime($fecha_elegida));
        $datos['fecha_lun'] = "";
        $datos['fecha_mar'] = "";
        $datos['fecha_mie'] = "";
        $datos['fecha_jue'] = "";
        $datos['fecha_vie'] = "";

        list($dia, $mes, $anho) = explode("/", $fecha_elegida);
        $hoynum = date("N", mktime(0, 0, 0, $mes, $dia, $anho));

        switch ($hoynum) {
            case 1:
                $datos['fecha_lun'] = $fecha_elegida;
                $datos['fecha_mar'] = $this->dameFecha($fecha_elegida, 1);
                $datos['fecha_mie'] = $this->dameFecha($fecha_elegida, 2);
                $datos['fecha_jue'] = $this->dameFecha($fecha_elegida, 3);
                $datos['fecha_vie'] = $this->dameFecha($fecha_elegida, 4);
                breaK;
            case 2:
                $datos['fecha_lun'] = $this->dameFecha($fecha_elegida, -1);
                $datos['fecha_mar'] = $fecha_elegida;
                $datos['fecha_mie'] = $this->dameFecha($fecha_elegida, 1);
                $datos['fecha_jue'] = $this->dameFecha($fecha_elegida, 2);
                $datos['fecha_vie'] = $this->dameFecha($fecha_elegida, 3);
                breaK;
            case 3:
                $datos['fecha_lun'] = $this->dameFecha($fecha_elegida, -2);
                $datos['fecha_mar'] = $this->dameFecha($fecha_elegida, -1);
                $datos['fecha_mie'] = $fecha_elegida;
                $datos['fecha_jue'] = $this->dameFecha($fecha_elegida, 1);
                $datos['fecha_vie'] = $this->dameFecha($fecha_elegida, 2);
                breaK;
            case 4:
                $datos['fecha_lun'] = $this->dameFecha($fecha_elegida, -3);
                $datos['fecha_mar'] = $this->dameFecha($fecha_elegida, -2);
                $datos['fecha_mie'] = $this->dameFecha($fecha_elegida, -1);
                $datos['fecha_jue'] = $fecha_elegida;
                $datos['fecha_vie'] = $this->dameFecha($fecha_elegida, 1);
                breaK;
            case 5:
                $datos['fecha_lun'] = $this->dameFecha($fecha_elegida, -4);
                $datos['fecha_mar'] = $this->dameFecha($fecha_elegida, -3);
                $datos['fecha_mie'] = $this->dameFecha($fecha_elegida, -2);
                $datos['fecha_jue'] = $this->dameFecha($fecha_elegida, -1);
                $datos['fecha_vie'] = $fecha_elegida;
                breaK;
        }

        list($dia, $mes, $anho) = explode("/", $datos['fecha_lun']);
        $fecha_lun = date("Y-m-d", mktime(0, 0, 0, $mes, $dia, $anho));

        list($dia, $mes, $anho) = explode("/", $datos['fecha_vie']);
        $fecha_vie = date("Y-m-d", mktime(0, 0, 0, $mes, $dia, $anho));

        $criteria = new CDbCriteria;
        $criteria->select = '*';
        $criteria->condition = 'fecha>=:fecha_lun AND fecha<=:fecha_vie AND persona_idPersona=:idJp';
        $criteria->params = array(':fecha_lun' => $fecha_lun,
            ':fecha_vie' => $fecha_vie,
            ':idJp' => $id
        );
        $criteria->order = 'fecha ASC, hora ASC';
        $datos['disponibilidadJP'] = Disponibilidad::model()->findAll($criteria);
        $datos['fecha_elegida'] = $fecha_elegida;

        if (isset($_POST['Jp'])) {
            $datos['model']->attributes = $_POST['Jp'];
            $datos['modelDispobilidad']->attributes = $_POST['Disponibilidad'];

            if ($datos['model']->save())
                $this->redirect(array('view', 'id' => $datos['model']->idJp));
        }
        $this->renderPartial('_asignarHorario', $datos, false, true);
    }

    public function actionHola() {
        $dato = array();
        $dato["cadena"] = "hola sin check";
        $dato["check"] = "";

        $this->render('hola', $dato);
    }

    public function actionUpdateHola() {
        $dato = array();
        $dato["cadena"] = $_POST['texto'];
        $dato["check"] = "checked";

        $this->renderPartial('_hola', $dato, false, true);
    }

    function sacaJps() {
        return Yii::app()->db->createCommand()
                        ->select('idJp,  nombre,  apellidoPaterno, apellidoMaterno')
                        ->from('jp')
                        ->order('idJp')
                        ->query();
    }

    function cuentaDiasEnSemana($id, $fechaInicio, $fechaFin) {
        $evas = Yii::app()->db->createCommand()
                ->select('*')
                ->from('evaluacion, jp_has_evaluacion, colegios, curso')
                ->where("jp_has_evaluacion.evaluacion_idEvaluacion = evaluacion.idEvaluacion 
                AND colegios.idColegios = evaluacion.colegios_idColegios 
                AND curso.idCurso = evaluacion.curso_idCurso 
                AND evaluacion.fecha>=:fechaInicio
                AND evaluacion.fecha<=:fechaFin
                AND jp_has_evaluacion.jp_idJp=:id
                AND evaluacion.estado like 'Asignada'", array(':id' => $id, ':fechaInicio' => $fechaInicio, ':fechaFin' => $fechaFin))
                ->group('evaluacion.fecha')
                ->query();
        return count($evas);
    }

    function modificaFecha($fecha, $dia) {
        list($year, $mon, $day) = explode('-', $fecha);
        return date('Y-m-d', mktime(0, 0, 0, $mon, $day + $dia, $year));
    }
    
    public function actionGenerarCSV() {
        header("Content-Type: application/force-download");
        header("Content-Transfer-Encoding: binary");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("content-disposition: attachment;filename=CSV-" . "DIAS-JPS" . ".csv");
        //empieza
        date_default_timezone_set('America/Lima');        
        $numDias = 0;
        $fechaDesde = '2013-11-18';
        $fechaHasta = '2013-12-31';        
                
        echo "nombre,";
        $fechaInicio = $fechaDesde;
        $fechaFin = $this->modificaFecha($fechaInicio, 4);
        while ($fechaFin <= $fechaHasta) {                                            
            echo $fechaInicio." - ".$fechaFin.",";
            $fechaInicio = $this->modificaFecha($fechaInicio,7);
            $fechaFin = $this->modificaFecha($fechaFin, 7);                
        }
        echo "Total Dias,\n";  
        
        $jps = $this->sacaJps();

        foreach ($jps as $jp) {
            $idJp = $jp['idJp'];
            $nombre = $jp['nombre'];
            $apellidoPaterno = $jp['apellidoPaterno'];
            $apellidoMaterno = $jp['apellidoMaterno'];
            $totalDias=0;
            echo $nombre." ".$apellidoPaterno." ".$apellidoMaterno.","; //nobre completo del jp
            
            $fechaInicio = $fechaDesde;
            $fechaFin = $this->modificaFecha($fechaInicio, 4);
            while ($fechaFin <= $fechaHasta) {
                $numDias = $this->cuentaDiasEnSemana($idJp, $fechaInicio, $fechaFin);                
                $totalDias=$totalDias+$numDias;
                echo $numDias.","; //numero de dias trabajados en ese semana
                
                $fechaInicio = $this->modificaFecha($fechaInicio,7);
                $fechaFin = $this->modificaFecha($fechaFin, 7);                
            }
            echo $totalDias."\n";
        }
    }

}
